/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persona;

import Congresos.Congreso;
import java.io.Serializable;
import java.util.ArrayList;
import Congresos.Trabajo;
import java.util.Iterator;
import java.util.Enumeration;
import java.util.GregorianCalendar;

/**
 *
 * @author alejandro.suarez3
 */
public class Revisor implements Serializable {

    private String nombre;
    private String dni;
    private String pasword;
    private String afiliacion;
    private String direccion;
    private String correoElectronico;
    private ArrayList<Trabajo> trabajoCorrejir;
    private ArrayList<String> tematica;
    private ArrayList<String> subTematica;
    private Congreso congreso;

    public Revisor(String nombre, String dni, String pasword, String afiliacion, String direccion, String correoElectronico) {
        setDni(dni);
        setNombre(nombre);
        setPasword(pasword);
        setAfiliacion(afiliacion);
        setDireccion(direccion);
        setCorreoElectronico(correoElectronico);
        trabajoCorrejir = new ArrayList<Trabajo>();
        tematica = new ArrayList<String>();
        subTematica = new ArrayList<String>();
        congreso = null;
    }

    public Revisor(String nombre, String dni, String pasword, ArrayList<String> tematica, ArrayList<String> subTematica, String afiliacion, String direccion, String correoElectronico) {
        setDni(dni);
        setNombre(nombre);
        setPasword(pasword);
        setAfiliacion(afiliacion);
        setDireccion(direccion);
        setCorreoElectronico(correoElectronico);
        trabajoCorrejir = new ArrayList<Trabajo>();
        congreso = null;
        tematica = new ArrayList<String>();
        setTematica(tematica);
        subTematica = new ArrayList<String>();
        setSubTematica(subTematica);
    }

    public String getAfiliacion() {
        return afiliacion;
    }

    public void setAfiliacion(String afiliacion) {
        this.afiliacion = afiliacion;
    }

    public String getCorreoElectronico() {
        return correoElectronico;
    }

    public void setCorreoElectronico(String correoElectronico) {
        if (correoElectronico.contains("@")) {
            this.correoElectronico = correoElectronico;
        } else {
            this.correoElectronico = "";
            System.out.println("El correo electronico es incorrecto");
        }
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public Congreso getCongreso() {
        return congreso;
    }

    public void setCongreso(Congreso congreso) {
        this.congreso = congreso;
    }

    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getPasword() {
        return pasword;
    }

    public void setPasword(String pasword) {
        this.pasword = pasword;
    }

    public ArrayList<String> getSubTematica() {
        return (ArrayList<String>) subTematica.clone();
    }

    public void setSubTematica(ArrayList<String> subTematica) {
        for (int i = 0; i < subTematica.size(); i++) {            //Chequeamos desde el main
            setSubTematica(subTematica.get(i));
        }
    }

    public void setSubTematica(String subTematica) {
        int chequeo = 0;
        for (int i = 0; i < this.subTematica.size(); i++) {
            if (this.subTematica.get(i).equals(subTematica)) {
                chequeo = 1;
                break;
            }
        }

        if (chequeo == 0) {
            this.subTematica.add(subTematica);
        } else {
            System.out.println("La subtematica esta repetida");
        }


    }

    public ArrayList<String> getTematica() {
        return (ArrayList<String>) tematica.clone();
    }

    public void setTematica(ArrayList<String> tematica) {
        for (int i = 0; i < tematica.size(); i++) {            //Chequeamos desde el main
            setTematica(tematica.get(i));
        }
    }

    public void setTematica(String tematica) {
        int chequeo = 0;
        for (int i = 0; i < this.tematica.size(); i++) {
            if (this.tematica.get(i).equals(tematica)) {
                chequeo = 1;
                break;
            }
        }

        if (chequeo == 0) {
            this.tematica.add(tematica);
        } else {
            System.out.println("La tematica esta repetida");
        }


    }

    public ArrayList<Trabajo> getTrabajoCorreguir() {
        return (ArrayList<Trabajo>) trabajoCorrejir.clone();
    }

    public void setTrabajoCorrejir(Trabajo trabajo) {
        this.trabajoCorrejir.add(trabajo);
    }

    public void setTrabajoCorrejir(ArrayList<Trabajo> trabajo) {
        for (int i = 0; i < trabajo.size(); i++) {
            setTrabajoCorrejir(trabajo.get(i));
        }
    }
    
    
     public void darBajaTrabajo(Trabajo trabajo) {
       if (this.trabajoCorrejir.size()>0){
       for (int i=0;i<this.trabajoCorrejir.size();i++){
           if(this.trabajoCorrejir.get(i).getTitulo().equals(trabajo.getTitulo())){
               this.trabajoCorrejir.remove(i);
               break;
           }
       }

    }
     }
    
    
    
    

    public void asignarNotaTrabajo(Trabajo trabajoCorrejir, float nota) {
        for (int i = 0; i < this.trabajoCorrejir.size(); i++) {
            if (this.trabajoCorrejir.get(i).getTitulo().equals(trabajoCorrejir.getTitulo())) {
                this.trabajoCorrejir.get(i).setNotas(dni, nota);
                Trabajo trabajo = new Trabajo(this.trabajoCorrejir.get(i).getTitulo(), this.trabajoCorrejir.get(i).getResumen(), this.trabajoCorrejir.get(i).getFichero(), this.trabajoCorrejir.get(i).getUsuarios(), this.trabajoCorrejir.get(i).getTematica(), this.trabajoCorrejir.get(i).getSubTematicas());
                this.trabajoCorrejir.get(i).getPonente().modificarContenidoTrabajo(trabajo, trabajo.getTitulo());
            }
        }
    }

    public void obtenerTrabajos(String tematica) {
        int chequeo = 0;
        for (int i = 0; i < this.trabajoCorrejir.size(); i++) {
            if (this.trabajoCorrejir.get(i).getTematica().equals(tematica)) {                //Solo tematicas????
                System.out.println("Trabajo con id " + i);
                chequeo = 1;
                imprimirTrabajos(this.trabajoCorrejir.get(i));
            }else {
                for (int j = 0; j < this.trabajoCorrejir.get(i).getSubTematicas().size(); j++) {
                    if (this.trabajoCorrejir.get(i).getSubTematicas().get(j).equals(tematica)) {
                        System.out.println("Trabajo con id " + i);
                        chequeo = 1;
                        imprimirTrabajos(this.trabajoCorrejir.get(i));
                        break;
                    }
                }
            }
        }
        if (chequeo == 0) {
            System.out.println("No existe ningun trabajo con dicha tematica");
        }

    }

    public void obtenerTrabajos() {
        for (int i = 0; i < this.trabajoCorrejir.size(); i++) {
            System.out.println("Trabajo con id " + i);
            imprimirTrabajos(this.trabajoCorrejir.get(i));
        }
    }
    
    public void imprimirTrabajos(Trabajo trabajo) {

        System.out.println("El titulo del trabajo es " + trabajo.getTitulo());
        System.out.println("El resumen del trabajo es " + trabajo.getResumen());
        System.out.println("El fichero del trabajo es " + trabajo.getFichero());
        System.out.println("Los revisores del trabajo son: ");
        
        Iterator fechas = trabajo.getFechas().values().iterator();

        ArrayList<String> dnis = new ArrayList<String>();
        Enumeration clave = trabajo.getFechas().keys();
        while (clave.hasMoreElements()) {
            dnis.add((String) clave.nextElement());
        }
        
        int indice=0;
        while (fechas.hasNext()) {  
           GregorianCalendar fecha= (GregorianCalendar) fechas.next();
           System.out.println("El revisor " + congreso.obtenerNombreRevisor(dnis.get(indice)) + " deberá asignar una nota al trabajo " + trabajo.getTitulo() + " antes del " + fecha.get(GregorianCalendar.DATE) + "/" + (fecha.get(GregorianCalendar.MONTH)+1) + "/"+ fecha.get(GregorianCalendar.YEAR));
           indice++;
        }

        System.out.println("La tematica del trabajo es " + trabajo.getTematica());
        System.out.println("Las subtematicas son:");
        for (int j = 0; j < trabajo.getSubTematicas().size(); j++) {
            System.out.println(trabajo.getSubTematicas().get(j));
        }
        Iterator calificaciones = trabajo.getNotas().values().iterator();

        ArrayList<String> totalClaves = new ArrayList<String>();
        Enumeration claves = trabajo.getNotas().keys();
        while (claves.hasMoreElements()) {
            totalClaves.add((String) claves.nextElement());
        }

        int contador = 0;
        
        while (calificaciones.hasNext()) {
            System.out.println("La calificacion del revisor " + congreso.obtenerNombreRevisor(totalClaves.get(contador)) + " para el trabajo " + trabajo.getTitulo() + " es: " + calificaciones.next());
            contador++;

        }
        if (contador==0){
             System.out.println("Este trabajo no contiene calificaciones ");
        }
        System.out.println();
        System.out.println();
    }


}
